HTTPS (全称: Hyper Text Transfer Protocol over SecureSocket Layer ),是以安全为目标的 HTTP 通道,在 HTTP 的基础上通过传输加密和身份认证保证了传输过程的安全性 。 HTTPS 在 HTTP 的基础下加入 SSL , HTTPS 的安全基础是 SSL ,因此加密的详细内容就需要 SSL 。 HTTPS 存在不同于 HTTP 的默认端口及一个加密 / 身份验证层(在 HTTP 与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面
关于 HTTP 的明文数据传输 , 攻击者最常用的攻击手法就是网络嗅探 , 试图从传输过程当中分析出敏感的数据 , 例如管理员对 Web 程序后台的登录过程等等 , 从而获取网站管理权限 , 进而渗透到整个服务器的权限。即使无法获取到后台登录信息 , 攻击者也可以从网络中获取普通用户的隐秘信息 , 包括手机号码 , 身份证号码 , 信用卡号等重要资料 , 导致严重的安全事故。进行网络嗅探攻击非常简单 , 对攻击者的要求很低。使用网络发布的任意一款抓包工具 , 一个新手就有可能获取到大型网站的用户信息 。
另外 ,HTTP 在传输客户端请求和服务端响应时 , 唯一的数据完整性检验就是在报文头部包含了本次传输数据的长度 , 而对内容是否被篡改不作确认。 因此攻击者可以轻易的发动中间人攻击 , 修改客户端和服务端传输的数据 , 甚至在传输数据中插入恶意代码 , 导致客户端被引导至恶意网站被植入木马。
客户端检查服务端证书,确认是否由自己信任的证书签发机构签发。 如果不是,将是否继续通讯的决定权交给用户选择 ( 注意,这里将是一个安全缺陷 ) 。如果检查无误或者用户选择继续,则客户端认可服务端的身份。
服务端要求客户端发送证书,并检查是否通过验证。失败则关闭连接,认证成功则从客户端证书中获得客户端的公钥,一般为 1024 位或者 2048 位。到此,服务器客户端双方的身份认证结束,双方确保身份都是真实可靠的。
客户端和服务端在开始传输数据之前,会协商传输过程需要使用的加密算法。 客户端发送协商请求给服务端 , 其中包含自己支持的非对称加密的密钥交换算法 ( 一般是 RSA), 数据签名摘要算法 ( 一般是 SHA 或者 MD5) , 加密传输数据的对称加密算法 ( 一般是 DES), 以及加密密钥的长度。 服务端接收到消息之后,选中安全性最高的算法,并将选中的算法发送给客户端,完成协商。客户端生成随机的字符串,通过协商好的非对称加密算法,使用服务端的公钥对该字符串进行加密,发送给服务端。 服务端接收到之后,使用自己的私钥解密得到该字符串。在随后的数据传输当中,使用这个字符串作为密钥进行对称加密。
SSL 使用序列号来保护通讯方免受报文重放攻击。这个序列号被加密后作为数据包的负载。在整个 SSL 握手中 , 都有一个唯一的随机数来标记 SSL 握手。 这样防止了攻击者嗅探整个登录过程,获取到加密的登录数据之后,不对数据进行解密 , 而直接重传登录数据包的攻击手法。
可以看到,鉴于电子商务等安全上的需求, HTTPS 对比 HTTP ,在安全方面已经取得了极大的增强。总结来说, HTTPS 的改进点在于创造性的使用了非对称加密算法,在不安全的网路上,安全的传输了用来进行对称加密的密钥,综合利用了非对称加密的安全性和对称加密的快速性。
HTTPS 主要由两部分组成: HTTP + SSL / TLS ,也就是在 HTTP 上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过 TLS 进行加密,所以传输的数据都是加密后的数据。